Appearance
21. supabase-feature-builder-meta.sql
원본 파일: 'C:\Repository\loafacto-hub\docs\web-ui\21. supabase-feature-builder-meta.sql'
sql
-- =============================================================================
-- feature_builder_meta: 홈 카드 전역 버전 관리 테이블
-- 목적:
-- - 기능 빌더(홈 카드) 구성이 코드/운영에서 바뀌었을 때,
-- 관리자 화면에서 "전 사용자 홈 카드 초기화" 버튼으로
-- 모든 사용자의 localStorage 캐시를 무시하고 기본값으로 되돌리기 위함.
-- - web-ui는 이 테이블의 version 값을 보고
-- localStorage('loafacto-feature-builder')를 초기화할지 결정한다.
--
-- 연동되는 프론트 코드:
-- - apps/web-ui/src/stores/featureBuilder.ts
-- - syncRemoteVersion()
-- - apps/web-ui/src/pages/admin/AdminSettings.vue
-- - onResetHomeCards()
-- =============================================================================
-- 1. 메타 테이블 생성
CREATE TABLE IF NOT EXISTS public.feature_builder_meta (
id text PRIMARY KEY,
version integer NOT NULL DEFAULT 0,
updated_at timestamptz NOT NULL DEFAULT now()
);
COMMENT ON TABLE public.feature_builder_meta IS
'홈 카드(기능 빌더) 전역 버전 관리용 메타 테이블. id=''global'' 행의 version이 변경되면 모든 사용자의 홈 카드 구성을 기본값으로 초기화한다.';
COMMENT ON COLUMN public.feature_builder_meta.id IS
'메타 키. web-ui에서는 id=''global'' 행의 version만 사용한다.';
COMMENT ON COLUMN public.feature_builder_meta.version IS
'홈 카드 전역 버전. 증가할 때마다 모든 사용자 localStorage 기반 홈 카드 캐시를 무효화하고 코드 기본값으로 초기화한다.';
COMMENT ON COLUMN public.feature_builder_meta.updated_at IS
'버전 갱신 시각.';
-- 2. 초기 행 준비 (최초 1회 실행 시)
INSERT INTO public.feature_builder_meta (id, version)
VALUES ('global', 1)
ON CONFLICT (id) DO NOTHING;
-- 3. RLS 설정 (선택사항: RLS를 사용하는 프로젝트일 경우)
-- - 기본 전략:
-- * super_admin / operator: SELECT, UPDATE, INSERT 가능
-- * 그 외 사용자는 접근 불가
--
-- user_roles(user_id, role) 테이블과 01. supabase-user-roles.sql을 사용한다고 가정.
ALTER TABLE public.feature_builder_meta ENABLE ROW LEVEL SECURITY;
CREATE POLICY "feature_builder_meta: admin select"
ON public.feature_builder_meta
FOR SELECT
TO authenticated
USING (
EXISTS (
SELECT 1
FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
CREATE POLICY "feature_builder_meta: admin insert"
ON public.feature_builder_meta
FOR INSERT
TO authenticated
WITH CHECK (
EXISTS (
SELECT 1
FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);
CREATE POLICY "feature_builder_meta: admin update"
ON public.feature_builder_meta
FOR UPDATE
TO authenticated
USING (
EXISTS (
SELECT 1
FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
)
WITH CHECK (
EXISTS (
SELECT 1
FROM public.user_roles
WHERE user_id = auth.uid()
AND role IN ('super_admin', 'operator')
)
);